#ifndef __KEY_DRIVE_H
#define __KEY_DRIVE_H

#include "my_define.h"

//按键配置项
#define KEY_NUM 3		
#define KEY_LONG_S	1	//连续长按启动时间

typedef volatile struct
{
	struct{
		//以下状态由按键扫描函数使用，外部只读
		u8 lock_1s:1;		//长按状态锁
		u8 lock_2s:1;	
		u8 lock_6s:1;	
		u8 press:1;			//按下状态
		u8 double_scan:1;	//等待双击
		
		//以下状态由按键任务使用
		u8 key_short:1;		//短按
		u8 key_double:1;	//双击
		u8 key_long:1;		//连续长按，按下达到启动时间后，每100ms产生一个连续长按事件
		u8 long_1s:1;		//长按1s
		u8 long_2s:1;	
		u8 long_6s:1;
	}flags;	
	u8 count;				//用来消抖
	u16 double_ticks_10ms;	//用来检测双击
	u16 long_ticks_10ms;	//用来检测长按
	u8 (*read_port)(void);	//按下返回1，否则返回0
	void (*key_short_callback)(void);
	void (*key_double_callback)(void);
	void (*key_long_callback)(void);
	void (*key_long_1s_callback)(void);
	void (*key_long_2s_callback)(void);
	void (*key_long_6s_callback)(void);

}my_key_t;
extern my_key_t mKey[KEY_NUM];

void Task_key(void);

#endif
